package orcleexam;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;

import account.Accountvo;
//ISdao와 연결 오버라이드 형성
public class sungDAO implements ISdao{
	//오라클 연결 private DRV , URL , insertSQL , selectSQL
	// 드라이버 연결 오라클 jdbc에 오라클 드라이버 연결
	private String DRV ="oracle.jdbc.driver.OracleDriver";
	// URL 연결 오라클에 아이디와 비밀번호 , 주소 , 포트번호, 프로젝트이름 
	private String URL ="jdbc:oracle:thin:spirit/spirit@112.216.253.125:1521:xe";
	// 테이블에 삽입을 위한 insert 절 선언 (필드 숫자 정의) 시퀀스이름 exam
	private String insertSQL = "insert into sungjuk values(exam.next(),?,?,?,?,?,?,?)";
	// 테이블을 보기위해 select 절 선언 필드 숫자 정의  밑 정렬방식(시퀀스 번호 필드 지정)
		private String selectSQL = "select * from EX01_SUNGJUK order by sjno desc";


	@Override
	public boolean insertSungjuk(sungvo ac) {
		//collection , preparedStatement ,boolean 지정
		Connection conn = null;
		PreparedStatement pstmt = null;
		boolean result = false;
		//예외처리 검사
		try{
			// conn , pstmt 지정
			conn = this.openDatebase();
			pstmt = conn.prepareStatement(insertSQL);
			pstmt.setString(1, ac.getName());
			pstmt.setInt(2, ac.getKor());
			pstmt.setInt(3, ac.getEng());
			pstmt.setInt(4, ac.getMat());
			pstmt.setInt(5, ac.getTot());
			pstmt.setFloat(6, ac.getAvg());
			pstmt.setString(7, ac.getGrade());
			//pstmt 업데이트 및 result 값
			pstmt.executeUpdate();
			result = true;
			//catch 시작
		}catch(Exception ex){
			ex.printStackTrace();
			//finally 문 
		}finally{
			closeDatebase(conn,pstmt,null);
		}
		return result;
	}
	// connection 에 대한 예외처리 문
	private Connection openDatebase(){
		try{
			// 드라이버와 URL을 부름
			Class.forName(DRV);
			return DriverManager.getConnection(URL);
		}catch(Exception ex){
			ex.printStackTrace();
		}
		return null;
	}
	// 반대 순서로 필드 close r,p,c 
	private void closeDatebase(
			Connection c, PreparedStatement p , ResultSet r){
		if(r != null)try{r.close(); r = null;}catch(Exception e){}
		if(p != null)try{p.close(); p = null;}catch(Exception e){}
		if(c != null)try{c.close(); c = null;}catch(Exception e){}
	}
	// select 문 시작
	@Override
	public List<sungvo> selectSungjuk() {
		// select 문에 conn ,pstmt, rs값 지정
		Connection conn = null;
		PreparedStatement pstmt = null;
		ResultSet rs = null;
		// list , ArrayList 사용
		List<sungvo> result = new ArrayList<>();
		// 예외처리 try 시작
		try{
			conn = openDatebase();
			pstmt = conn.prepareStatement(selectSQL);
			rs = pstmt.executeQuery();
			// 성적처리service에 대한 값 지정
			while(rs.next()){
				sungvo ac = new sungvo();
				ac.setName(rs.getString("Name"));
				ac.setKor(rs.getInt("Kor"));
				ac.setEng(rs.getInt("Eng"));
				ac.setMat(rs.getInt("Mat"));
				ac.setTot(rs.getInt("Tot"));
				ac.setAvg(rs.getFloat("Avg"));
				ac.setGrade(rs.getString("Grade"));
				
				result.add(ac);
			}
			//catch사용
		}catch(Exception ex){
			ex.printStackTrace();
			// finally 사용
		}finally{
			closeDatebase(conn,pstmt,rs);
		}
		return result;
	}

	}
